#!/bin/bash

# Cloudflare域名维护脚本
# 维护临时域名稳定性，避免重启后域名变化

echo "🔄 Cloudflare域名维护工具"
echo "=================================="

# 进入项目目录
cd /home/root1/pythonApp || {
    echo "❌ 无法进入项目目录 /home/root1/pythonApp"
    exit 1
}

# 检查隧道状态
echo "🔍 检查隧道状态..."
TUNNEL_STATUS=$(docker compose ps -q tunnel)

if [ -z "$TUNNEL_STATUS" ]; then
    echo "⚠️  隧道未运行，启动隧道..."
    docker compose up -d tunnel
    # 等待隧道启动
    sleep 5
else
    echo "✅ 隧道正在运行"
fi

# 获取当前域名（如果存在）
CURRENT_DOMAIN=$(docker compose logs tunnel 2>/dev/null | grep -E "https://.*\.trycloudflare\.com" | tail -1 | sed 's/.*\(https:\/\/[^ ]*\.trycloudflare\.com\).*/\1/')

if [ -z "$CURRENT_DOMAIN" ]; then
    echo "❌ 获取当前域名失败，重新启动隧道..."
    docker compose restart tunnel
    # 等待隧道启动
    sleep 5
    CURRENT_DOMAIN=$(docker compose logs tunnel 2>/dev/null | grep -E "https://.*\.trycloudflare\.com" | tail -1 | sed 's/.*\(https:\/\/[^ ]*\.trycloudflare\.com\).*/\1/')
    
    if [ -z "$CURRENT_DOMAIN" ]; then
        echo "❌ 仍然无法获取域名，请检查隧道配置"
        exit 1
    fi
fi

NEW_DOMAIN=$CURRENT_DOMAIN
echo "✅ 当前域名: $NEW_DOMAIN"

# 检查.env文件中的域名配置
ENV_DOMAIN=$(grep -E "^CORS_ALLOWED_ORIGINS=" .env | sed 's/.*=//' | cut -d',' -f1)

# 如果.env中的域名与当前域名不同，更新配置
if [ "$ENV_DOMAIN" != "$NEW_DOMAIN" ]; then
    echo "🔄 检测到域名不匹配，需要更新配置"

    # 更新所有配置文件
    echo "📝 更新配置文件..."

    # 更新.env文件（仅更新域名部分，只保留生产环境域名）
    sed -i "s|^CORS_ALLOWED_ORIGINS=.*|CORS_ALLOWED_ORIGINS=$NEW_DOMAIN|" /home/root1/pythonApp/.env

    # 更新前端文件
    echo "🎨 更新前端文件..."

    # 更新register.html
    if [ -f "/home/root1/pythonApp/static/register.html" ]; then
        sed -i "s|const API_BASE_URL = '.*';|const API_BASE_URL = '$NEW_DOMAIN';|g" /home/root1/pythonApp/static/register.html
        echo "✅ register.html 更新成功"
    else
        echo "⚠️ register.html 不存在，跳过更新"
    fi

    # 更新index.html  
    if [ -f "/home/root1/pythonApp/static/index.html" ]; then
        sed -i "s|const API_BASE_URL = '.*';|const API_BASE_URL = '$NEW_DOMAIN';|g" /home/root1/pythonApp/static/index.html
        echo "✅ index.html 更新成功"
    else
        echo "⚠️ index.html 不存在，跳过更新"
    fi

    # 更新app.py中的SocketIO CORS - 只保留生产环境域名
    if [ -f "/home/root1/pythonApp/app.py" ]; then
        sed -i "s|cors_allowed_origins=\[\"https://.*\.trycloudflare\.com\"\]|cors_allowed_origins=\[\"$NEW_DOMAIN\"\]|g" /home/root1/pythonApp/app.py
        echo "✅ app.py 更新成功"
    else
        echo "⚠️ app.py 不存在，跳过更新"
    fi

    # 重启应用服务以应用新配置
    echo "🔄 重启应用服务以应用新配置..."
    docker compose restart chatapp

    # 等待服务启动
    sleep 5

    # 验证服务状态
    echo "✅ 服务状态："
    docker ps | grep -E "chatapp-server|chatapp-tunnel"

    # 测试域名
    echo "🧪 测试域名..."
    sleep 3
    HEALTH_CHECK_RESULT=$(curl -s -o /dev/null -w "%{http_code}" "$NEW_DOMAIN/api/health" || echo "请求失败")
    echo "健康检查状态码: $HEALTH_CHECK_RESULT"
else
    echo "✅ 所有配置已保持一致，无需更新"
fi

# 保存当前域名到缓存文件，下次重启时恢复
echo "💾 保存当前域名到缓存文件..."
echo "$NEW_DOMAIN" > /home/root1/pythonApp/current_domain_cache.txt

# 显示当前域名信息
echo "📋 当前域名信息："
echo "- 域名: $NEW_DOMAIN"
echo "- 缓存文件: /home/root1/pythonApp/current_domain_cache.txt"

echo ""
echo "🎉 更新完成！"
echo "新访问地址: $NEW_DOMAIN"
echo "注册地址: $NEW_DOMAIN/register.html"
echo ""
echo "📱 手机端访问:"
echo "- 扫描二维码或直接访问: $NEW_DOMAIN"
